In many applications, there is often a need to compare and or match strings of characters to one another. In a typical scenario, a user may have a string pattern that he wants to compare to many different strings of characters. For example, a user may have a list of file names and will want to search the file names for the pattern “ab*.txt”, wherein the character “*” is a wildcard character representing an unknown string of characters comprised of as many as zero to an unlimited number of characters. A search engine may go through the list of characters sequentially to determine which of the strings match the user selected pattern. Thus, in this typical matching engine, it is a user selected pattern that is being compared and matched to one or more character strings. Moreover, this typical matching engine will find all strings that match the pattern and is not able to qualitatively or quantitatively differentiate between the strings that match the pattern.
There remains the need, however, for a matching engine that will allow an input string to be compared and matched to a group of predefined string patterns. Such a matching engine should be able to determine, for a given input string, which group of predefined pattern strings match the input string, and of these predefined patterns which is the pattern that is most similar to the input string (i.e., the best matching pattern). Such a matching engine has many different uses, for example, it can be used in scenarios that involve making decisions based on information attached to a particular pattern. Thus, when the best pattern match to a given input string is found, information attached to the pattern can be used to take further action. In one implementation, for example, the matching engine may be implemented in a Session Initiation Protocol (SIP) server to make routing decisions.